<?php
class House extends Eloquent
{
    public function rooms()
    {
        return $this->has_many('Room');
    }

    public function user()
    {
        return $this->belongs_to('User');
    }

    public function ward()
    {
        return $this->belongs_to('Ward');
    }

    public function anchor()
    {
        return $this->belongs_to('Anchor');
    }

    public function comments()
    {
        return $this->has_many('Comment');
    }

    public function images()
    {
        return $this->has_many('Image');
    }

    public function get_random_image()
    {
        $c = $this->images()->count();
        if ($c > 0) {
            return $this->images[rand(0, $c - 1)]->url;
        } else {
            return asset('img/thumbs/default.jpg');
        }

    }

    public function get_name()
    {
        $name = Str::title($this->get_attribute('house_name'));
        if (!starts_with($name, 'Nhà Trọ')) {
            $name = 'Nhà Trọ ' . $name;
        }

        return e($name);
    }

    public function get_intro()
    {
        return e($this->get_attribute('intro'));
    }


    /**
     * Tính toán số liệu thống kê trên các loại phòng của nhà trọ
     * <code>
     * $h->room_calc('price', 'min'); // trả về phòng trọ rẻ nhất của nhà trọ $h
     * </code>
     *
     * @param $attr
     * @param string $func
     * @return int|mixed
     */
    public function room_calc($attr, $func = 'min')
    {
        $object = call_user_func(array('Room', 'where_house_id'), $this->id);
        $val = call_user_func(array($object, $func), $attr);
        is_not_null($val) || $val = 0;

        return $val;
    }

    public function get_room_price_statistic()
    {
        $min = $this->room_calc('price', 'min');
        $max = $this->room_calc('price', 'max');
        $result = '';
        if ($min <= 0 && $max <= 0) {
            return '<span class="error">Chủ nhà trọ chưa cung cấp loại phòng nào</span>';
        }

        if ($min === $max) {
            $result = format_vnd($min);
        } else {
            $result = 'từ ' . format_vnd($min) . ' - ' . format_vnd($max);
        }

        return $result;
    }

    public function get_room_area_statistic()
    {
        $min = $this->room_calc('area', 'min');
        $max = $this->room_calc('area', 'max');
        $result = $min;
        if ($min != $max) {
            $result = 'từ ' . $min . ' - ' . $max;
        }
        if ($result === 0) {
            return '<span class="error">Chủ nhà trọ chưa cung cấp loại phòng nào</span>';
        } else {
            return $result . ' m <sup>2</sup>';
        }
    }

    public function has_rooms()
    {
        return $this->rooms()->count() > 0;
    }

    public function facilities()
    {
        $check = array(
            'garret' => 'có gác',
            'internet' => 'Internet',
            'tv' => 'TV',
            'air_condition' => 'Điều hòa',
            'toilet' => 'Nhà vệ sinh trong'
        );

        $result = array();
        foreach ($this->rooms as $room) {
            foreach ($check as $key => $f) {

                if ($room->$key) {

                    $result[$key] = true;
                }
            }
        }
        $s = '';
        foreach ($result as $k => $v) {
            $s .= ($v ? $check[$k] : '') . ', ';
        }

        if (ends_with($s, ', ')) {
            $s = substr($s, 0, strlen($s) - 2);
        }

        return $s;
    }



    public function get_address()
    {
        if ($this->id > -1) {
            $st = $this->house_address . ', ' .
                $this->ward->ward_name . ', ' .
                $this->ward->district->district_name . ', ' .
                $this->ward->district->city->city_name;
        } else {
            $st = 'Không xác định';
        }

        return $st;
    }

    public function get_room_types_count()
    {

    }

    public function get_url()
    {
        $slug = $this->get_attribute('house_name');
        if (function_exists('slug')) {
            $slug = slug($slug);
        }

        $slug = Str::slug($slug);

        return url("nha-tro/" . $this->id . "/" . $slug . ".html");
    }

    public function get_title()
    {
        return e($this->get_attribute('title'));
    }

    public static function post_able()
    {
        return (MyAuth::check() && (MyAuth::admin() ||
            (MyAuth::owner() && MyAuth::user()->houses()->count() < setting('houses_limit'))));
    }
}